home *** CD-ROM | disk | FTP | other *** search
/ Workbench Add-On / Workbench Add-On - Volume 1.iso / BBS-Archive / Comm / AmiTCP30b2.lha / src / amitcp / netinet / in_proto.c < prev    next >
C/C++ Source or Header  |  1993-08-12  |  7KB  |  231 lines

  1. RCS_ID_C="$Id: in_proto.c,v 1.8 1993/06/04 11:16:15 jraja Exp $";
  2. /*
  3.  * Copyright (c) 1993 AmiTCP/IP Group, <amitcp-group@hut.fi>,
  4.  *                    Helsinki University of Technology, Finland.
  5.  *                    All rights reserved.
  6.  *
  7.  * HISTORY
  8.  * $Log: in_proto.c,v $
  9.  * Revision 1.8  1993/06/04  11:16:15  jraja
  10.  * Fixes for first public release.
  11.  *
  12.  * Revision 1.7  1993/05/17  00:16:44  ppessi
  13.  * Changed RCS version. Added rcsid.
  14.  *
  15.  * Revision 1.6  1993/04/11  22:25:48  jraja
  16.  * Added STKARGFUN to protocol input & output functions (if used in protosw).
  17.  *
  18.  * Revision 1.5  93/04/05  19:05:59  19:05:59  jraja (Jarno Tapio Rajahalme)
  19.  * Changed storage of the spl functions  return values to type spl_t.
  20.  * Added include for conf.h to every .c file.
  21.  * 
  22.  * Revision 1.4  93/03/05  21:09:33  21:09:33  jraja (Jarno Tapio Rajahalme)
  23.  * Fixed includes (again).
  24.  * 
  25.  * Revision 1.3  93/03/05  03:19:56  03:19:56  ppessi (Pekka Pessi)
  26.  * Compiles with SASC. Initial test version.
  27.  * 
  28.  * Revision 1.2  93/02/26  09:00:07  09:00:07  jraja (Jarno Tapio Rajahalme)
  29.  * Made this compile with ANSI C (added prototypes).
  30.  * 
  31.  * Revision 1.1  92/11/17  16:29:08  16:29:08  jraja (Jarno Tapio Rajahalme)
  32.  * Initial revision
  33.  * 
  34.  */
  35.  
  36. /*
  37.  * Copyright (c) 1982, 1986 Regents of the University of California.
  38.  * All rights reserved.
  39.  *
  40.  * Redistribution and use in source and binary forms, with or without
  41.  * modification, are permitted provided that the following conditions
  42.  * are met:
  43.  * 1. Redistributions of source code must retain the above copyright
  44.  *    notice, this list of conditions and the following disclaimer.
  45.  * 2. Redistributions in binary form must reproduce the above copyright
  46.  *    notice, this list of conditions and the following disclaimer in the
  47.  *    documentation and/or other materials provided with the distribution.
  48.  * 3. All advertising materials mentioning features or use of this software
  49.  *    must display the following acknowledgement:
  50.  *    This product includes software developed by the University of
  51.  *    California, Berkeley and its contributors.
  52.  * 4. Neither the name of the University nor the names of its contributors
  53.  *    may be used to endorse or promote products derived from this software
  54.  *    without specific prior written permission.
  55.  *
  56.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  57.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  58.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  59.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  60.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  61.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  62.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  63.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  64.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  65.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  66.  * SUCH DAMAGE.
  67.  *
  68.  *    @(#)in_proto.c    7.5 (Berkeley) 6/28/90
  69.  */
  70.  
  71. #include <conf.h>
  72.  
  73. #include <sys/param.h>
  74. #include <sys/socket.h>
  75. #include <sys/protosw.h>
  76. #include <sys/domain.h>
  77. #include <sys/malloc.h>
  78. #include <sys/mbuf.h>
  79.  
  80. #include <netinet/in.h>
  81. #include <netinet/in_systm.h>
  82.  
  83. #include <netinet/in_proto_protos.h>
  84.  
  85. /*
  86.  * TCP/IP protocol family: IP, ICMP, UDP, TCP.
  87.  */
  88. #ifdef AMITCP
  89. #include <netinet/tcp.h>
  90. #include <netinet/ip_icmp_protos.h>
  91. #include <netinet/ip_input_protos.h>
  92. #include <netinet/ip_output_protos.h>
  93. #include <netinet/raw_ip_protos.h>
  94. #include <netinet/tcp_input_protos.h>
  95. #include <netinet/tcp_subr_protos.h>
  96. #include <netinet/tcp_timer_protos.h>
  97. #include <netinet/tcp_usrreq_protos.h>
  98. #include <netinet/udp_usrreq_protos.h>
  99. #else
  100. int    ip_output(),ip_ctloutput();
  101. int    ip_init(),ip_slowtimo(),ip_drain();
  102. int    icmp_input();
  103. int    udp_input(),udp_ctlinput();
  104. int    udp_usrreq();
  105. int    udp_init();
  106. int    tcp_input(),tcp_ctlinput();
  107. int    tcp_usrreq(),tcp_ctloutput();
  108. int    tcp_init(),tcp_fasttimo(),tcp_slowtimo(),tcp_drain();
  109. int    rip_input(),rip_output(),rip_ctloutput(), rip_usrreq();
  110. #endif
  111.  
  112. /*
  113.  * IMP protocol family: raw interface.
  114.  * Using the raw interface entry to get the timer routine
  115.  * in is a kludge.
  116.  */
  117. #if NIMP > 0
  118. int    rimp_output(), hostslowtimo();
  119. #endif
  120.  
  121. #if NSIP
  122. int    idpip_input(), nsip_ctlinput();
  123. #endif
  124.  
  125. #if TPIP
  126. int    tpip_input(), tpip_ctlinput(), tp_ctloutput(), tp_usrreq();
  127. int    tp_init(), tp_slowtimo(), tp_drain();
  128. #endif
  129.  
  130. #if EON
  131. int    eoninput(), eonctlinput(), eonprotoinit();
  132. #endif /* EON */
  133.  
  134. extern    struct domain inetdomain;
  135.  
  136. struct protosw inetsw[] = {
  137. { 0,        &inetdomain,    0,        0,
  138.   0,        ip_output,    0,        0,
  139.   0,
  140.   ip_init,    0,        ip_slowtimo,    ip_drain,
  141. },
  142. { SOCK_DGRAM,    &inetdomain,    IPPROTO_UDP,    PR_ATOMIC|PR_ADDR,
  143.   udp_input,    0,        udp_ctlinput,    ip_ctloutput,
  144.   udp_usrreq,
  145.   udp_init,    0,        0,        0,
  146. },
  147. { SOCK_STREAM,    &inetdomain,    IPPROTO_TCP,    PR_CONNREQUIRED|PR_WANTRCVD,
  148.   tcp_input,    0,        tcp_ctlinput,    tcp_ctloutput,
  149.   tcp_usrreq,
  150.   tcp_init,    tcp_fasttimo,    tcp_slowtimo,    tcp_drain,
  151. },
  152. { SOCK_RAW,    &inetdomain,    IPPROTO_RAW,    PR_ATOMIC|PR_ADDR,
  153.   rip_input,    rip_output,    0,        rip_ctloutput,
  154.   rip_usrreq,
  155.   0,        0,        0,        0,
  156. },
  157. { SOCK_RAW,    &inetdomain,    IPPROTO_ICMP,    PR_ATOMIC|PR_ADDR,
  158.   icmp_input,    rip_output,    0,        rip_ctloutput,
  159.   rip_usrreq,
  160.   0,        0,        0,        0,
  161. },
  162. #if TPIP
  163. { SOCK_SEQPACKET,&inetdomain,    IPPROTO_TP,    PR_CONNREQUIRED|PR_WANTRCVD,
  164.   tpip_input,    0,        tpip_ctlinput,        tp_ctloutput,
  165.   tp_usrreq,
  166.   tp_init,    0,        tp_slowtimo,    tp_drain,
  167. },
  168. #endif
  169. /* EON (ISO CLNL over IP) */
  170. #if EON
  171. { SOCK_RAW,    &inetdomain,    IPPROTO_EON,    0,
  172.   eoninput,    0,        eonctlinput,        0,
  173.   0,
  174.   eonprotoinit,    0,        0,        0,
  175. },
  176. #endif
  177. #if NSIP
  178. { SOCK_RAW,    &inetdomain,    IPPROTO_IDP,    PR_ATOMIC|PR_ADDR,
  179.   idpip_input,    rip_output,    nsip_ctlinput,    0,
  180.   rip_usrreq,
  181.   0,        0,        0,        0,
  182. },
  183. #endif
  184.     /* raw wildcard */
  185. { SOCK_RAW,    &inetdomain,    0,        PR_ATOMIC|PR_ADDR,
  186.   rip_input,    rip_output,    0,        rip_ctloutput,
  187.   rip_usrreq,
  188.   0,        0,        0,        0,
  189. },
  190. };
  191.  
  192. struct domain inetdomain =
  193.     { AF_INET, "internet", NULL, NULL, NULL, 
  194.       inetsw, &inetsw[sizeof(inetsw)/sizeof(inetsw[0])], NULL };
  195.  
  196. #if NIMP > 0
  197. extern    struct domain impdomain;
  198.  
  199. struct protosw impsw[] = {
  200. { SOCK_RAW,    &impdomain,    0,        PR_ATOMIC|PR_ADDR,
  201.   0,        rimp_output,    0,        0,
  202.   rip_usrreq,
  203.   0,        0,        hostslowtimo,    0,
  204. },
  205. };
  206.  
  207. struct domain impdomain =
  208.     { AF_IMPLINK, "imp", NULL, NULL, NULL,
  209.       impsw, &impsw[sizeof (impsw)/sizeof(impsw[0])], NULL };
  210. #endif
  211.  
  212. #if NHY > 0
  213. /*
  214.  * HYPERchannel protocol family: raw interface.
  215.  */
  216. int    rhy_output();
  217. extern    struct domain hydomain;
  218.  
  219. struct protosw hysw[] = {
  220. { SOCK_RAW,    &hydomain,    0,        PR_ATOMIC|PR_ADDR,
  221.   0,        rhy_output,    0,        0,
  222.   rip_usrreq,
  223.   0,        0,        0,        0,
  224. },
  225. };
  226.  
  227. struct domain hydomain =
  228.     { AF_HYLINK, "hy", NULL, NULL, NULL,
  229.       hysw, &hysw[sizeof (hysw)/sizeof(hysw[0])], NULL };
  230. #endif
  231.